package com.atwisdom.star.core.bsl.modelClass.consume;

import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.vo.ActionData;
import com.atwisdom.star.common.vo.PageInfo;
import com.atwisdom.star.common.vo.ResultInfo;

import java.util.List;

public interface ConsumeInstanceBslService {
    /**
     * 查询全部摘要（通用）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryAllInfo(ActionData<JSONObject> actionData);

    /**
     * 分页查询全部摘要（通用）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<PageInfo> queryAllInfoByPage(ActionData<JSONObject> actionData);

    /**
     * 查询全部数据（通用）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryAll(ActionData<JSONObject> actionData);

    /**
     * 分页查询全部数据（通用）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> listAllByPage(ActionData<JSONObject> actionData);

    /**
     * 按条件查询模型实例
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> query(ActionData<JSONObject> actionData);

    /**
     * 按条件分页查询模型实例摘要
     * @param actionData 参数
     * @return 返回结果
     */
    ResultInfo<?> queryInfoByPage(ActionData<JSONObject> actionData);

    /**
     * 按条件分页查询模型实例
     * @param actionData 参数
     * @return 返回结果
     */
    ResultInfo<?> queryByPage(ActionData<JSONObject> actionData);

    /**
     * 根据id数组查询实例数据
     * @param actionData
     * @return
     */
    ResultInfo<List<JSONObject>> queryByIds(ActionData<JSONObject> actionData);

    /**
     * 添加新模型
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> add(ActionData<JSONObject> actionData);

    /**
     * 添加新模型,并初始化web等参数
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> addAndInitWeb(ActionData<JSONObject> actionData);

    /**
     * 更新模型属性字段
     * 更新，需要同步更新实例，同步更新历史数据
     * 1、className 和 自定字段
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> updateById(ActionData<JSONObject> actionData);

    /**
     * 更新模型属性字段
     * 更新，需要同步更新实例，同步更新历史数据
     * 1、className 和 自定字段
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> updateByIds(ActionData<JSONObject> actionData);


    /**
     * 更新模型类型和类名（配置阶段）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> updateClassName(ActionData<JSONObject> actionData);

    /**
     * 按ids删除模型
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByIds(ActionData<JSONObject> actionData);

    /**
     * 接className删除
     * 1、删除实例、2、删除历史 3、更新redis
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByClassName(ActionData<JSONObject> actionData);

    /**
     * 批量删除
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByClassNames(ActionData<JSONObject> actionData);

    /**
     * 按Id 废除模型
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> repealByIds(ActionData<JSONObject> actionData);

    /**
     * 批量废除
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> repealByClassNames(ActionData<JSONObject> actionData);
}
